package com.risk.management.service;

import com.risk.management.entity.Risk;
import com.risk.management.entity.RiskHistory;
import java.util.List;

/**
 * 风险历史记录服务接口
 */
public interface RiskHistoryService {
    /**
     * 根据ID查询风险历史记录
     * @param id 历史记录ID
     * @return 历史记录
     */
    RiskHistory getRiskHistoryById(Long id);
    
    /**
     * 根据风险ID查询历史记录
     * @param riskId 风险ID
     * @return 历史记录列表
     */
    List<RiskHistory> getRiskHistoriesByRiskId(Long riskId);
    
    /**
     * 创建风险时记录历史
     * @param risk 风险信息
     * @param operatorId 操作人ID
     * @param operatorUsername 操作人用户名
     * @return 是否成功
     */
    boolean recordCreate(Risk risk, Long operatorId, String operatorUsername);
    
    /**
     * 更新风险状态时记录历史
     * @param risk 风险信息
     * @param beforeStatus 更新前状态
     * @param afterStatus 更新后状态
     * @param operatorId 操作人ID
     * @param operatorUsername 操作人用户名
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordStatusUpdate(Risk risk, Integer beforeStatus, Integer afterStatus, 
                              Long operatorId, String operatorUsername, String remark);
    
    /**
     * 更新风险责任人时记录历史
     * @param risk 风险信息
     * @param beforeOwnerId 更新前责任人ID
     * @param afterOwnerId 更新后责任人ID
     * @param operatorId 操作人ID
     * @param operatorUsername 操作人用户名
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordOwnerUpdate(Risk risk, Long beforeOwnerId, Long afterOwnerId, 
                             Long operatorId, String operatorUsername, String remark);
    
    /**
     * 更新风险级别时记录历史
     * @param risk 风险信息
     * @param beforeLevel 更新前级别
     * @param afterLevel 更新后级别
     * @param operatorId 操作人ID
     * @param operatorUsername 操作人用户名
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordLevelUpdate(Risk risk, Integer beforeLevel, Integer afterLevel, 
                             Long operatorId, String operatorUsername, String remark);
    
    /**
     * 删除风险时记录历史
     * @param risk 风险信息
     * @param operatorId 操作人ID
     * @param operatorUsername 操作人用户名
     * @param remark 备注
     * @return 是否成功
     */
    boolean recordDelete(Risk risk, Long operatorId, String operatorUsername, String remark);
    
    /**
     * 添加风险历史记录
     * @param riskHistory 历史记录
     * @return 是否成功
     */
    boolean addRiskHistory(RiskHistory riskHistory);
} 